<?php

namespace App\Console\Gather;


use App\Models\SiteStock;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Config;


class Base extends Command
{
    /**
     * 采集舆情文章
     *
     * 参数与选项的区别
     *      在执行命令时，参数必须严格按定义时的顺序输入，不需输入参数名，只需输入参数的值即可。
     *      输入选项则必须带选项名，且选项名前须加 -- 前缀（选项简写字母前加 -），选项可按任意顺序输入
     */

    // 请求 以及参数
    // protected $signature = 'command:name {param1} {param2}';  // 必填参数
    // protected $signature = 'command:name {参数名?} {参数名=默认值} {参数名? : 参数说明}';  // 可选参数
    // protected $signature = 'command:name {--选项名} {--选项名=} {--选项名=默认值} {--简写字母|选项名} {--选项名 : 选项说明}';  // 选项

    protected $signature   = 'command:gather-';
    protected $description = '各个地方的舆情文章采集操作';
    protected $curl;  // 采集 实例化
    protected $qiniu;  // 七牛云的相关配置
    protected $error;
    protected $errorno;

    // 初始化
    public function __construct()
    {
        $this->init();

        parent::__construct();
    }

    // 初始化
    public function init() { }

    // 获取所有的股票消息
    protected function allStock($form = 0, $to = 1000)
    {

        $file = app()->basePath().'/bak/stocks.json';
        if(!is_file($file)){
            // ->where('id', '>', $form)->where('id', '<', $to)
            $stockDb = new SiteStock();
            $stocks  = $stockDb->get()->toArray();
            $stocks  = array_column($stocks, null, 'id');
            file_put_contents($file, json_encode($stocks, JSON_UNESCAPED_UNICODE));
        } else{
            $stocks = file_get_contents($file);
            $stocks = json_decode($stocks, true);
        }


        $result = [];
        foreach($stocks as $key => $val){
            if(($key > $form) && ($key < $to)){
                $result[] = $val;
            }
        }

        return $result;
    }


    // 返回所有的关键词
    protected function allKeyword()
    {
        $result = Config::get('app.site_keyword');
        $lists  = [];
        foreach($result as $key => $item){
            $lists[] = ['id' => $key + 1, 'name' => $item];
        }

        return $lists;
    }

    // 页面展示消息
    protected function showMsg($msg, $code = 400)
    {
        $this->errorno = $code;
        if($code == 500){
            $this->error($msg);
            // die;
        } else{
            $this->comment($msg);
        }
    }

    // 页面展示消息
    protected function showError($error, $code = 400)
    {
        $this->errorno = $code;
        $this->error($error);
        if($code == 500){
            // die;
        }
    }

    // 页面展示消息 并结束
    protected function showDie($error)
    {
        $this->error($error);
        die;
    }

    // 设置 cmd 标题
    protected function cmdTitle($title)
    {
        // 如果是Windows系统才执行
        if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
            echo `title=$title`;
        }
    }

    // 以前的执行
    public function _handle()
    {
        // 输出信息
        $this->line('准备各种颜色的输出信息');
        $this->line('line <info>info</info> <error>error</error> <comment>comment</comment> <question>question</question>');
        $this->info('This is info');
        $this->error('This is error');
        $this->comment('This is comment');
        $this->question('This is question');
        $this->line("1\n2\n");

        // 在 storage/app/logs中
        // Log::info('command:name命令执行 | 这里是命令任务');

        return true; // return 语句是不会展示出来的
    }

}
